
#include <stdio.h>
#include "sqlite3.h"



int main(int argc, char *argv[])
{
    //1.创建并打开一个数据库链接对象
    sqlite3 * ppDb;     //保存数据库链接对象
    int re = sqlite3_open(argv[1], &ppDb);	//参数一：指定要打开的sqlite3数据库的路径名
                    					 	//ppDb： 二级指针，用来保存打开的数据库的连接对象
                    					 	//argv: /home/china/
    if(re != SQLITE_OK)
    {
        printf("sqlite3_open error : %s\n", sqlite3_errmsg(ppDb) );
        return -1;
    }

    //2.创建SQL语句对象
    char *sql = "INSERT INTO stu values(1008, 'fafa', 'w', 23, 259, 'ChangSha', 998877);";
    sqlite3_stmt *ppStmt;   //保存SQL语句对象
    const char *pzTail;

    re = sqlite3_prepare_v2( ppDb, sql, -1, &ppStmt, &pzTail ); //创建SQL语句对象
	//sqlite3_prepare_v2各参数作用（创建一个SQL语句对象）：
	/*
		参数1:	数据库链接对象
		参数2:	指向原始的SQL语句 
		参数3: 	原始SQL语句的长度（原始SQL语句可以包含多条语句），需要指定编译SQL语句到那个位置
                < 0 编译SQL语句到第一个\0结束
		参数4:	二级指针，保存编译好的SQL语句对象
		参数5:	如果不为NULL，则pzTail指向SQL语句 未被使用的部分
    */
    if(re != SQLITE_OK)
    {
        printf("sqlite3_prepare_v2 error : %s\n", sqlite3_errmsg(ppDb) );
        sqlite3_close(ppDb);
        return -1;
    }

    //3.执行SQL语句对象
    re = sqlite3_step( ppStmt );
    if(re != SQLITE_DONE )
    {
        printf("sqlite3_step error : %s\n", sqlite3_errmsg(ppDb) );
        sqlite3_close(ppDb);
        return -1;
    }
    printf("success !\n");

    //4.销毁SQL语句对象
    sqlite3_finalize(ppStmt);

    //5.关闭一个数据库链接对象
    sqlite3_close(ppDb);
}



